import java.util.Scanner;

/**
 * @author : niu niu
 * @version : 1.0.0
 * @date : 2023/4/18 17:23
 * 红与黑   BFS
 * 蘑菇阵   DP  注意先判断 i==n 和 j==m 的情况，因为这组数据需要使用 i==1 和j==1情况的数据。
 */
public class Day38 {
    //---------------------------------------------------------------------
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        while (scanner.hasNext()){
            int n = scanner.nextInt();
            int m = scanner.nextInt();
            int k = scanner.nextInt();
            boolean[][] has = new boolean[n+1][m+1];
            for (int i = 0; i < k; i++) {
                int x = scanner.nextInt();
                int y = scanner.nextInt();
                has[x][y] = true;
            }

            double[][] res = new double[n+1][m+1];
            for (int i = 1; i <= n; i++) {
                for (int j = 1; j <= m; j++) {
                    if (has[i][j]){
                        res[i][j]=0;
                        continue;
                    }
                    if (i==1 && j==1 ){
                        res[i][j] =1;
                        continue;
                    }
                    if (i==n&&j==m){
                        res[i][j] = res[i][j-1]+res[i-1][j];
                        continue;
                    }
                    if (i==n){
                        res[i][j] = res[i-1][j]*0.5+res[i][j-1];
                        continue;
                    }
                    if (j==m){
                        res[i][j] = res[i][j-1]*0.5+res[i-1][j];
                        continue;
                    }
                    if (i==1){
                        res[i][j] = res[i][j-1]*0.5;
                        continue;
                    }
                    if (j==1){
                        res[i][j] = res[i-1][j]*0.5;
                        continue;
                    }

                    res[i][j] = res[i][j-1]*0.5+res[i-1][j]*0.5;
                }
            }
            System.out.printf("%.2f %n",res[n][m]);
        }
    }


    //---------------------------------------------------------------------
    private static int count = 0;

    public static void main1(String[] args) {
        Scanner scanner = new Scanner(System.in);
        while (scanner.hasNext()) {
            count = 0;
            int m = scanner.nextInt();
            int n = scanner.nextInt();
            //定义地图
            char[][] map = new char[m][n];
            //定义当前坐标初始值
            int x = 0;
            int y = 0;
            for (int i = 0; i < m; i++) {
                String s = scanner.next();
                for (int j = 0; j < n; j++) {
                    map[i][j] = s.charAt(j);
                    if (map[i][j] == '@') {
                        x = i;
                        y = j;
                    }
                }
            }
            //处理
            solution(map, x, y);
            System.out.println(count);
        }
    }

    private static void solution(char[][] map, int x, int y) {
        if (x < 0 || x > map.length - 1 || y < 0 || y > map[0].length - 1 || map[x][y] == '#') {
            return;
        }
        count++;
        map[x][y] = '#';
        solution(map, x - 1, y);
        solution(map, x + 1, y);
        solution(map, x, y - 1);
        solution(map, x, y + 1);
    }


}
